Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.02.2013, 10:52
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Динамическое отображение содержимого серверного файла на странице
Здравствуйте. Есть такая задача.
Имеется текстовый файл со значением, например, температуры, который постоянно обновляется. Он лежит на сервере. Я хочу, чтобы значение температуры(этого файла) отображалось в реальном времени на веб-странице(без php).
Пока получилось только единожды, при прогрузке всех DOM-объектов, отобразить содержимое этого файла. Делал так:
<!DOCTYPE html>
<html>
  <head>
    <script type='text/javascript' src='jquery.min.js'></script>
  </head>
  
  <body>
    <script type="text/javascript">
    
            $(document).ready(function()
            {
                $('#div1').load('text.txt');
            });
            
    </script>
    
      <input type="button" id="b1" value="Push" />
      <div id="div1">Div</div>
    
  </body>
</html>

Помогите пожалуйста реализовать поставленную задачу.
Есть ли какой-то метод у jquery, который мне поможет или нужно самому писать бесконечный цикл(который мне, кстати, ничего не дал)?
Ответить с цитированием
  #2 (permalink)  
Старый 15.02.2013, 10:56
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну в реальном времени не получится (это тогда вам в сторону веб-сокетов смотреть). А вот периодическая проверка - раз в пять сек например - легко. Смотрите setTimeout.
Ответить с цитированием
  #3 (permalink)  
Старый 15.02.2013, 11:20
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Пробовал вот так:
<!DOCTYPE html>
<html>
  <head>
    <script type='text/javascript' src='jquery.min.js'></script>
  </head>
  
  <body>
    <script type="text/javascript">
    
            $(document).ready(function()
            {
               while(true)
               {
                 setTimeout(function() { $('#div1').load('text.txt') }, 5000);
               }
            });
            
    </script>
    
      <input type="button" id="b1" value="Push" />
      <div id="div1">Div</div>
    
  </body>
</html>

В итоге получилась бесконечно загружающаяся страница.

Я думал о таком варианте: сделать загрузку из файла по событию движения мышью. Но это не то.)
Ответить с цитированием
  #4 (permalink)  
Старый 15.02.2013, 11:21
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

А что дадут веб-сокеты? Вы с ними работали?
А как бы Вы реализовали периодическую проверку?
Ответить с цитированием
  #5 (permalink)  
Старый 15.02.2013, 11:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Voronar, по setTimeout обновляете свою температуру, причем при вызове load() вторым параметром передаете callback-функцию, вызываемую по окончанию загрузки. В ней то и вновь вызываете setTimeout. В итоге получается цикл:

setTimeout -> load() -> setTimeout() -> load() ...

Сообщение от Voronar
А что дадут веб-сокеты? Вы с ними работали?
Дадут realtime, так как сервер будет сам уведомлять об изменении. Нет, не работал.
Сообщение от Voronar
А как бы Вы реализовали периодическую проверку?
Уже ответил.
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2013, 11:43
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Я не совсем до конца понял... У меня какая-то рекурсия в голове.
А можете показать на коде?
Ответить с цитированием
  #7 (permalink)  
Старый 15.02.2013, 11:56
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Получилось сделать вот так:
<!DOCTYPE html>
<html>
  <head>
    <script type='text/javascript' src='jquery.min.js'></script>
  </head>
  
  <body>
    <script type="text/javascript">
			function ddata()
			{
              $(document).ready(function()
              {
                setTimeout(function() { $('#div1').load('text.txt', ddata) }, 2000);
				
              });
			}
			ddata();        
    </script>
    
         
      <input type="button" id="b1" value="Push" />
      <div id="div1">Div</div>
    
    
  </body>
</html>

Только не знаю, грамотно ли это.
Ответить с цитированием
  #8 (permalink)  
Старый 15.02.2013, 12:02
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

(function queue() {
    setTimeout(function(){
        $('#div1').load('text.txt', queue);
    }, 5000);
})();


Разложу на 2 функции чтоб понятнее было:

function queue() {
    setTimeout(update, 5000);
}
function update() {
    $('#div1').load('text.txt', queue);
}
queue();
Ответить с цитированием
  #9 (permalink)  
Старый 15.02.2013, 12:04
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Voronar, молодец.
Сообщение от Voronar
грамотно ли это
Почти, только нужно не $(document).ready внутри ddata, а наоборот
Ответить с цитированием
  #10 (permalink)  
Старый 15.02.2013, 12:08
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Да, я поменял наоборот.
<!DOCTYPE html>
<html>
  <head>
    <script type='text/javascript' src='jquery.min.js'></script>
  </head>
  
  <body>
    <script type="text/javascript">
			
              $(document).ready(function()
              {
			  function ddata()
			  {
                setTimeout(function() { $('#div1').load('text.txt', ddata) }, 1000);
			  }
			  ddata();
              });
			
			
			
			$(document).ready(function()
			{
              $("#b1").click(function()
			  {
				alert("Worked!");
              });
			});


			
    </script>
    
         
      <input type="button" id="b1" value="Push" />
      <div id="div1">Div</div>
    
    
  </body>
</html>

и это стало работать нормально.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое изменение ширины в зависимости от содержимого iNfantry Events/DOM/Window 38 24.07.2017 19:38
тизер и динамическое подключение файла скрипта crime Events/DOM/Window 9 23.07.2012 01:55
имя файла на странице hydel Элементы интерфейса 4 12.12.2011 19:37
Как прочитать контент из файла и добавить его к текущей странице fedotxxl jQuery 0 01.12.2011 15:12
Отображение на странице Sadist_dead AJAX и COMET 4 26.09.2011 14:17